iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0

進入主程式前,我們先看class 大塊

Class Net:神經網路的定義處。

class Net(nn.Module):
    def __init__(self, hidden_size):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(1, 20, 5, 1)
        self.conv2 = nn.Conv2d(20, 50, 5, 1)
        self.fc1 = nn.Linear(4*4*50, hidden_size)
        self.fc2 = nn.Linear(hidden_size, 10)
    def forward(self, x):
        x = F.relu(self.conv1(x))
        x = F.max_pool2d(x, 2, 2)
        x = F.relu(self.conv2(x))
        x = F.max_pool2d(x, 2, 2)
        x = x.view(-1, 4*4*50)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return F.log_softmax(x, dim=1)

這裡,我們定義了一個class,名字叫Net。
注意: 在模型中必須要定義 forward 函數。而backward 函數(用來計算梯度)會被autograd自動創建。 可以在 forward 函數中使用任何針對 Tensor 的操作。

<<init 部分>>

  • Conv1:二維卷積層, 輸入為黑白的,所以RGB通道為1(HxWxC =28x28x1),輸出通道為20, 卷積核大小為5x5,跨步為1。
  • Conv2:依照conv1類推。請注意,conv1 output chennel,為conv2 input chennel。
  • fc1: an affine(仿射) operation: y = Wx + b 。 全連接層fc1: 線性層, 輸入feature 4x4x50,輸出feature 為hidden_size。請注意,50,為conv2 output chennel。
  • Fc2: 類推fc1。輸出feature 為 10。(對應數字0..9)

<<forward 部分>>

  • 輸入HxWxC =28x28x1圖片,進入神經層conv1。再進入矯正函數ReLU,將負數全部歸0。Output tensor: 24x24x20。
  • 進入max_pool2d函數。(x, 2, 2)表示取2x2的方形kernnel,每次跨兩步。在每次的2x2的方形kernnel中,取最大值。Output tensor: 12x12x20
  • (12x12x20),進入神經層conv2。。再進入矯正函數ReLU,將負數全部歸0。Output tensor: 8x8x50。
  • (8x8x50)進入max_pool2d函數。Output tensor: 4x4x50。
  • x.view(-1, 4x4x50)表示將x轉變成2維平面(r,c),c = 4x4x50,-1表示剩餘的都給r (所有元素除以[4x4x50])。其實,此時r =1,所以變成長條!
  • x = F.relu(self.fc1(x)):x進入fc1而後再矯正負數為0(ReLU)。
  • x = self.fc2(x):我們已經矯正過了,所以不須再次矯正。
  • 回覆函數值:return F.log_softmax(x, dim=1)。以[概率]的形式表達[0..9]哪個數字最有可能。此處,dim=1,表示每行進行softmax運算,讓每行和為1,再將每個元素取log值。

圖示如下:

https://ithelp.ithome.com.tw/upload/images/20210928/20141491uvDddRVDLw.png

https://ithelp.ithome.com.tw/upload/images/20210928/20141491xO3ru0QyNX.png

https://ithelp.ithome.com.tw/upload/images/20210928/20141491NkwEAi8nXi.png
以上為神經網路的定義。
請繼續看下回分解。


上一篇
模型的內容02 __main__
下一篇
模型的內容04 def main()
系列文
新手一起來Azure上玩 NNI (auto-ML的一種)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言